home *** CD-ROM | disk | FTP | other *** search
Wrap
-- QTVR Handlers --============================================================================= -- Routines for initializing and cleaning up the Director movie. ------------------------------------------------------------------------------- global gPanoMovie, gPathName, gLastTimeRollover, gPanoFrame, mediaPath, currNode, dbFlag, video, doubled, currLoc, currSpot, puppetList, onPC, exitPanList, termPanList, studioAngleList, gFrameScript, gStashedPanoData, currPano, gAtriumPanList, gPlaceList, gLastNode, vrPath, gSpotType, gClickList, gIsRack, gIntClipTimes, gLowMem, gMainMovie --============================================================================= -- StartMovie -- -- Runs at movie start time. Initializes key globals, calls machine specific -- init handler. ------------------------------------------------------------------------------- on init put empty into gPanoMovie put empty into gPathName put false into gLastTimeRollover put empty into gPanoFrame set dbFlag = false set video = false set doubled = false set puppetList = [] set the text of field "text box" = " " -- set the foreColor of cast "text box" = 38 set exitPanList = [#town:[300,-1,29], #hitf:[203,-4,32], #righ:[210,-5,36], #reco:[107,0,47], #larr:[134,3,29], #guil:[11,2,20], #chur:[191,3,23], #ocea:[101,-2,26], #wiss:[105,-2,17], #mast:[210,-1,26]] puppetIt 9 set gLastNode = 11 set gIsRack = 0 set gClickList = [#equipt:[38,54],#staff:[22,38],#projects:[8,24],#profile:[0,10]] set studioAngleList = [#hitf:[274,4,69], #righ:[255,3,59], #reco:[230,3,66], #larr:[210,3,56], #guil:[190,3,71], #chur:[166,5,68], #ocea:[150,3,65], #wiss:[125,3,56], #town:[105,4,69], #mast:[81,3,65]] set termPanList = [#hitf:3, #righ:4, #reco:5, #larr:6, #guil:7, #chur:8, #ocea:9, #wiss:10,#town:11,#mast:12] set gAtriumPanList = [#interview:[3,180], #skyw:[3,0], #soli:[5,0], #terrace:[5,180], #c21:[7,0], #listen:[7,180], #elevator:[8,90], #adobe:[6,180], #apple:[2,0], #data:[2,180], #dmi:[4,180], #fwb:[4,0], #compuserve:[6,0], #macromedia:[8,0], #kaba:[8,180], #sound:[8,190], #mix:[8,300]] set gIntClipTimes = [[24667,27130], [0,3900], [3980,8281], [8370,9600], [9700,11318], [11368,13391], [13481,17286], [17346,20306], [20356, 22800], [22850, 24600]] put return & return -- startController global gPlaceList set gPlaceList = [#1:"hitfVR", #2:"righVR", #3:"recoVR", #4:"larrVR", #5:"guilVR", #6:"churVR", #7:"oceaVR", #8:"wissVR", #9:"mastVR", #10:"townVR", #11:"Terminus", #12:"Listen", #13:"terrace", #14:"Interview", #15:"Atrium", #16:"c21", #18:"soli", #17:"SkywVR"] LoadRawPictIntoString set gMainMovie = the PathName & "Prestige.Dir" end on startMovie set the visible of sprite 20 = false set puppetList = [] if the machineType = 256 then initPC else initMac end --============================================================================= -- initMac & initPC -- -- Machine-specific initialization handlers called from startMovie. -- Initializes key globals, opens the external code library, registers the -- QuickTime VR components, and sets up the Callback Factory. ------------------------------------------------------------------------------- on initMac set onPC = false -- Need to open up the external xlib so that we don't have the -- XCMD floating-point bug problem when we save. -- This would be commented out just before we turn this into a projector. openxlib "QuickTime VR XCMDs" openXlib "Prestige Externals" InitializeMemory checkMem -- Register the QuickTime VR component -- This would turn into RegisterComponent (":", empty) when the components are -- embedded in the projector. -- RegisterComponent (":", empty) RegisterComponent (the pathname & "QuickTime VR Components", empty) -- Need to set up the XCMD Callback Factory so that we can execute callbacks -- to Lingo handlers from PanoMovie global gQTVRCallBackFactory put CallBackTracer(mNew) into gQTVRCallBackFactory SetCallBack PanoMovie,gQTVRCallBackFactory end on initPC if gLowMem then set mediaPath = the pathName & "lowmem\" else set mediaPath = the pathName end if set onPC = true -- Need to open up the external xlib openxlib "QTVRW.QTC" -- Need to set up the XCMD Callback Factory so that we can execute callbacks -- to Lingo handlers from PanoMovie global gPanoCallbackFactory, gTestCallbackFactory put panoCallbacks(mNew) into gPanoCallbackFactory end --============================================================================= -- StopMovie -- -- Runs at movie stop time. Closes any open pano or nav movies. Disposes -- of the XCMD Callback Factory and closes the external code library. ------------------------------------------------------------------------------- on stopMovie -- Close any open panoramic or object movies ClosePanoMovie -- Close the external XCMD library -- This would be commented out just before we turn this into a projector. closeXlib -- Dispose of the XCMD Callback Factory global gQTVRCallBackFactory if objectP(gQTVRCallBackFactory) then gQTVRCallBackFactory (mDispose) end on leave if objectp(ECDX) then stopcd disposeECDX end if -- Close any open panoramic or object movies ClosePanoMovie -- Close the external XCMD library -- This would be commented out just before we turn this into a projector. closeXlib -- Dispose of the XCMD Callback Factory global gQTVRCallBackFactory if objectP(gQTVRCallBackFactory) then gQTVRCallBackFactory (mDispose) clearGlobals quit end --============================================================================= -- Routines for managing panoramic movies ------------------------------------------------------------------------------- --============================================================================= -- OpenPanoMovie -- pFilename is the full file path of the file -- pSpriteNum is the sprite associated with the direct Pano Movie -- pShowOnOpen is a boolean for showing the movie on screen immediately -- -- Opens the file pFileName as a panoramic movie, and sets up callback -- handlers as specified. Updates the screen with the movie's default -- view if requested by pShowOnOpen ------------------------------------------------------------------------------- on OpenPanoMovie pFileName, pSpriteNum, pShowOnOpen global gPanoMovie, gPathName -- The use of a single global gPanoMovie constrains these routines -- to only allow one pano movie to be open at a time. -- Close any other open pano movie. ClosePanoMovie set theFile = mediaPath & pFileName if onPC then set gPanoMovie = QTVRW (mNew, "Pan") if not objectP(gPanoMovie) then put "Unable to create new Pan instance" beep exit end if put gPanoMovie (mOpenMovie, theFile, the left of sprite pSpriteNum ¬ & "," & the top of sprite pSpriteNum) into tResultCode if tResultCode = 0 then put "Unable to open panomovie" gPanoMovie (mDispose) beep exit end if set currNode = gPanoMovie (mGetNodeID) else cleanMem -- Make the pano movie display in the rect covered by sprite pSpriteNum put the left of sprite pSpriteNum & "," & the top of sprite pSpriteNum & "," &¬ the right of sprite pSpriteNum & "," & the bottom of sprite pSpriteNum into tPanoRect put PanoMovie("openMovie", "Direct", theFile, tPanoRect) into gPanoMovie if gPanoMovie contains "error" then -- Display the error in the message window put gPanoMovie put empty into gPanoMovie beep exit end if set currNode = PanoMovie("Direct", gPanoMovie, "get", "nodeID") -- directUpdate end if -- put ExtractPathName(theFile) into gPathName InitPanoCallbacks if pShowOnOpen then directUpdate end if end OpenPanoMovie --============================================================================= -- InitPanoCallbacks -- -- Initializes the callbacks used for panoramic movies. ------------------------------------------------------------------------------- on InitPanoCallbacks global gPanoMovie, gPanoCallbackFactory if onPC then if objectP(gPanoMovie) and objectP(gPanoCallbackFactory) then -- Set up callback handlers for panoramic movies. gPanoMovie(mSetRolloverCallback, gPanoCallbackFactory, "spotRoll") end if else if gPanoMovie <> empty then -- Set up callback handlers for panoramic movies. -- We reset each callback to empty if we're not setting it to a handler name; -- PanoMovie "Direct", gPanoMovie, "set", "rolloverHotSpotHandler", empty PanoMovie "Direct", gPanoMovie, "set", "rolloverHotSpotHandler", "spotRollover" -- PanoMovie "Direct", gPanoMovie, "set", "nodeLeaveHandler", empty -- PanoMovie "Direct", gPanoMovie, "set", "nodeLeaveHandler", "sampleNodeLeaveHandler" end if end if end InitPanoCallbacks --============================================================================= -- directUpdate -- -- Updates the pano movie display. ------------------------------------------------------------------------------- on directUpdate if onPC then gPanoMovie (mUpdate) else PanoMovie "Direct", gPanoMovie, "update" end if end --============================================================================= -- ShowPanoMovie -- [pQuality] is the quality level at which to display the update -- -- Updates the pano movie display. Has the side effect of changing -- the current quality level to pQuality, if specified. ------------------------------------------------------------------------------- on ShowPanoMovie pQuality global gPanoMovie if onPC then if objectP (gPanoMovie) then if not voidP(pQuality) then gPanoMovie (mSetQuality, string(pQuality)) gPanoMovie (mUpdate) end if else if gPanoMovie <> empty then if not voidP(pQuality) then PanoMovie "Direct", gPanoMovie, "set", "quality", pQuality PanoMovie "Direct", gPanoMovie, "update" end if end if end ShowPanoMovie --============================================================================= -- SetPanoNode -- pNodeID is the number of the node to go to -- pUpdate is true if a screen update is to be performed -- [pQuality] is the quality level at which to display the update -- -- Changes the current node as specified. If pUpdate is true, updates the -- screen to reflect that node's default view. Has the side effect of changing -- the current quality level to pQuality, if specified. ------------------------------------------------------------------------------- on SetPanoNode pNodeID, pUpdate, pQuality global gPanoMovie if onPC then if objectP (gPanoMovie) then gPanoMovie (mSetNodeID, integer(pNodeID)) if not voidP(pQuality) then gPanoMovie (mSetQuality, string(pQuality)) gPanoMovie (mUpdate) end if else if gPanoMovie <> empty then PanoMovie "Direct", gPanoMovie, "set", "nodeID", pNodeID if not voidP(pQuality) then PanoMovie "Direct", gPanoMovie, "set", "quality", pQuality if pUpdate then PanoMovie "Direct", gPanoMovie, "Update" end if end if set currNode = pNodeID end SetPanoNode --============================================================================= -- SwingPanoMovie -- pHPan is the destination horizontal pan angle -- pVPan is the destination vertical pan angle -- pZoom is the destination zoom angle -- pSwingSpeed is the speed at which to swing -- pSwingQuality is the quality at which to swing -- pFinalQuality is the quality at which to re-update the destination view -- -- Swings the view around to a specified direction. Has the side effect of -- changing the current quality level to pFinalQuality ------------------------------------------------------------------------------- on SwingPanoMovie pHPan, pVPan, pZoom, pSwingSpeed, pSwingQuality, pFinalQuality global gPanoMovie if onPC then if objectP (gPanoMovie) then -- Set up the destination pan and zoom angles gPanoMovie (mSetZoomAngle, string(pZoom)) gPanoMovie (mSetVPanAngle, string(pVPan)) gPanoMovie (mSetHPanAngle, string(pHPan)) -- For performance, you can use lower quality during the swing gPanoMovie (mSetQuality, string(pSwingQuality)) gPanoMovie (mSetTransitionMode, "swing") gPanoMovie (mSetTransitionSpeed, string(pSwingSpeed)) gPanoMovie (mUpdate) -- Set transition mode to normal gPanoMovie (mSetTransitionMode, "normal") -- Only do a reupdate if the quality values are different if pFinalQuality <> pSwingQuality then gPanoMovie (mSetQuality, string(pSwingQuality)) gPanoMovie (mUpdate) end if end if else if gPanoMovie <> empty then -- debug "mac swingPanoMovie" -- Set up the destination pan and zoom angles PanoMovie "Direct", gPanoMovie, "set", "zoomAngle", pZoom PanoMovie "Direct", gPanoMovie, "set", "vPanAngle", pVPan PanoMovie "Direct", gPanoMovie, "set", "hPanAngle", pHPan -- debug "set angles",0 -- For performance, you can use lower quality during the swing PanoMovie "Direct", gPanoMovie, "set", "quality", pSwingQuality PanoMovie "Direct", gPanoMovie, "set", "transitionMode", "swing" PanoMovie "Direct", gPanoMovie, "set", "transitionSpeed", pSwingSpeed -- debug "set qualities",0 PanoMovie "Direct", gPanoMovie, "update" -- Set transition mode to normal PanoMovie "Direct", gPanoMovie, "set", "transitionMode", "normal" -- Only do a reupdate if the quality values are different if pFinalQuality <> pSwingQuality then PanoMovie "Direct", gPanoMovie, "set", "quality", pFinalQuality PanoMovie "Direct", gPanoMovie, "update" end if end if end if end SwingPanoMovie --============================================================================= -- SetPanoMovieView -- pHPan is the destination horizontal pan angle -- pVPan is the destination vertical pan angle -- pZoom is the destination zoom angle -- [pQuality] is the quality at which to display the view -- -- Displays a new view in the current node. Has the side effect of changing -- the current quality level to pQuality, if specified. ------------------------------------------------------------------------------- on SetPanoMovieView pHPan, pVPan, pZoom, pQuality global gPanoMovie if onPC then if objectP (gPanoMovie) then -- Set up the destination pan and zoom angles gPanoMovie (mSetZoomAngle, string(pZoom)) gPanoMovie (mSetVPanAngle, string(pVPan)) gPanoMovie (mSetHPanAngle, string(pHPan)) if not voidP(pQuality) then gPanoMovie (mSetQuality, string(pQuality)) gPanoMovie (mUpdate) end if else if gPanoMovie <> empty then PanoMovie "Direct", gPanoMovie, "set", "zoomAngle", pZoom PanoMovie "Direct", gPanoMovie, "set", "vPanAngle", pVPan PanoMovie "Direct", gPanoMovie, "set", "hPanAngle", pHPan if not voidP(pQuality) then PanoMovie "Direct", gPanoMovie, "set", "quality", pQuality PanoMovie "Direct", gPanoMovie, "update" end if end if end SetPanoMovieView --============================================================================= -- ClosePanoMovie -- -- Disposes an open pano movie. This does not remove the image from -- the screen. ------------------------------------------------------------------------------- on ClosePanoMovie global gPanoMovie if onPC then if objectP (gPanoMovie) then -- debug "dispose" gPanoMovie (mDispose) end if else if gPanoMovie <> empty then PanoMovie "Direct", gPanoMovie, "dispose" put empty into gPanoMovie end if end if cursor 200 cursor 0 end ClosePanoMovie --============================================================================= -- PanoFrameScript -- -- When run frequently, provides cursor feedback over the pano movie -- and handles mouse down and keyboard actions. ------------------------------------------------------------------------------- on PanoFrameScript set pSpriteNum = 4 if rollover(pSpriteNum) then set the text of cast "text box" = "Click and drag to move around." -- Only run mouseOver if there's a movie AND Director is in the foreground if onPC then set isMovie = objectP (gPanoMovie) else if gPanoMovie <> empty and RunningInForeground() = "true" then set isMovie = true end if end if if isMovie then -- repeat while rollover(pSpriteNum) if onPC then put gPanoMovie (mMouseOver) into tMouseOverResult else PanoMovie "Direct", gPanoMovie, "mouseOver" put the result into tMouseOverResult end if -- Result is 0 if you just wandered over the window -- without mousing down, if you zoomed in or out without -- mousing down, if you used the arrow keys, or if there -- was an unhandled event if tMouseOverResult <> 0 then put item 1 of tMouseOverResult into tAction -- debug "tAction", tAction if tAction = "jump" then set gLastNode = currNode put item 2 of tMouseOverResult into currNode -- debug "currNode", currNode if currLoc = "c21" then checkVideoButton if currLoc = "skyw" then checkNodeMap updateNodeMarker else if tAction = "stil" then put item 2 of tMouseOverResult into currSpot -- popStil else if tAction = "misc" then put item 2 of tMouseOverResult into currSpot else if tAction = "undf" then put item 2 of tMouseOverResult into currSpot else if tAction = "pan " then -- Watch out for that space! if gIsRack then unPopRack end if else if tAction = "goto" then put item 2 of tMouseOverResult into currSpot else if tAction = "exit" then put item 2 of tMouseOverResult into currSpot exitStudio else if tAction = "kios" then put item 2 of tMouseOverResult into currSpot goKiosk else if tAction = "stud" then put item 2 of tMouseOverResult into currSpot goStudio else if tAction = "door" then put item 2 of tMouseOverResult into currSpot gotoAction else if tAction = "fole" then put item 2 of tMouseOverResult into currSpot playSound else if tAction = "rack" then put item 2 of tMouseOverResult into currSpot popRack else if tAction = "shlf" then put item 2 of tMouseOverResult into currSpot popRack end if put true into gLastTimeRollover else if rollover(pSpriteNum) then -- There was an arrow key event or some unhandlable event, -- but cursor is still over panoramic window put true into gLastTimeRollover else -- The cursor is no longer over the panoramic window -- Set the cursor twice because Director tries to be smart and -- doesn't change the cursor if your current cursor command -- is the same as the last one. It doesn't realize of course, -- that QTVR has changed the cursor in between. -- KNOWN BUG: It appears that the cursor command is ignored if the mouse -- is not over the stage, so if you move out of the movie window -- fast enough and off the stage, the cursor will remain unchanged. cursor 200 cursor 0 -- set the locV of sprite rollTextBg = -1000 -- set the locV of sprite rollTextFld = -1000 put false into gLastTimeRollover end if -- end repeat end if else if gLastTimeRollover then -- See comment(s) above cursor 200 cursor 0 set the cursor of sprite 18 = [218] put false into gLastTimeRollover -- Allow a high quality update in pano window if needed if onPC then if objectP(gPanoMovieObj) then gPanoMovieObj(mIdle) end if else if gPanoMovie <> empty then PanoMovie "Direct", gPanoMovie, "idle" end if end if end if end PanoFrameScript --============================================================================= -- jumpNode -- -- Jumps to a new node, keeping the orientation from the old node. -- Called by mouseUp in node buttons on node map. ------------------------------------------------------------------------------- on jumpNode newNode -- debug "newNode", newNode if voidP(newNode) then -- determine which node user has clicked on set nodeSprite = the clickOn set newNode = nodeSprite - 30 else -- didn't come from a click set nodeSprite = newNode + 30 end if -- debug "nodeSprite", nodeSprite -- debug "newNode", newNode set currNode = newNode updateNodeMarker -- stash angles from old node if onPC then set zoom = gPanoMovie (mGetZoomAngle) set vert = gPanoMovie (mGetVPanAngle) set horiz = gPanoMovie (mGetHPanAngle) else set zoom = PanoMovie("Direct", gPanoMovie, "get", "zoomAngle") set vert = PanoMovie("Direct", gPanoMovie, "get", "vPanAngle") set horiz = PanoMovie("Direct", gPanoMovie, "get", "hPanAngle") end if -- jump to new node, but don't display setPanoNode newNode, false -- set angles to match old node's & update setPanoMovieView horiz, vert, zoom if currLoc = "c21" then checkVideoButton if currLoc = "skyw" then checkNodeMap end on updateNodeMarker set markerSprite = 48 puppetIt markerSprite set nodeSprite = currNode + 30 set the locH of sprite markerSprite = the locH of sprite nodeSprite set the locV of sprite markerSprite = the locV of sprite nodeSprite updatestage end --============================================================================= -- PanoMovie callback handler routines ------------------------------------------------------------------------------- factory panoCallbacks method spotRoll pHotSpotID -- put "method spotRoll" -- deBug "pHotSpotID", pHotSpotID spotRollover pHotSpotID -- if not voidP(pHotSpotID) then -- gPanoMovie (mSetHotSpotID, pHotspotID) -- set spotname = gPanoMovie (mGetHotSpotName) -- set gSpotType = gPanoMovie (mGetHotgSpotType) -- if gSpotType = "stil" or gSpotType = "navg" or gSpotType = "stud" or gSpotType = "door" or gSpotType = "kios" then -- put spotName into field "text box" -- end if -- deBug "spotName", spotName -- deBug "gSpotType", gSpotType -- else -- -- if pHotSpotID = 0 then -- put " " into field "text box" -- end if end --============================================================================= -- spotRollover -- pHotSpotID is the id of the hot spot the user is over -- -- Called by PanoMovie whenever the hot spot the cursor is over changes. ------------------------------------------------------------------------------- on spotRollover pHotSpotID -- debug "pHotSpotID", pHotSpotID if onPC then gPanoMovie (mSetHotSpotID, pHotspotID) set spotname = gPanoMovie (mGetHotSpotName) set gSpotType = gPanoMovie (mGetHotSpotType) else PanoMovie "Direct", gPanoMovie, "set", "hotSpotID", pHotSpotID set gSpotType = PanoMovie("Direct", gPanoMovie, "get", "hotSpotType") set spotName = PanoMovie("Direct", gPanoMovie, "get", "hotSpotName") end if -- debug "spotName", spotName -- debug "gSpotType", gSpotType if gSpotType = "stil" or gSpotType = "misc" or gSpotType = "navg" then put spotName into field "text box" end if if gSpotType = "stud" then set studList = [#chur:"The Church Studios", #ocea:"Ocean Way Recording", #larr:"Larrabee Sound Studios", #reco:"Record Plant", #hitf:"The Hit Factory", #righ:"Right Track Recording", #mast:"Masterfonics", #wiss:"Wisseloord", #guil:"Studio Guillaume Tell", #town:"The Town House"] put "Click to transport to " & getAProp(studList, spotName) & "." into field "text box" end if if gSpotType = "exit" then if spotName = "Atr From Sky" then put "Click to return to the Atrium." into field "text box" if spotName = "Terminus" then put "Click to return to the Studio Terminus." into field "text box" end if if gSpotType = "door" then if spotname = "elevUp" then put "Click to take the elevator to the Atrium" into field "text box" else put "Click to" && spotName into field "text box" end if if gSpotType = "rack" then put "Click for a list of the contents of this rack." into field "text box" end if if gSpotType = "shlf" then put "Click for a list of the contents of this shelf." into field "text box" end if if gSpotType = "fole" then put "Click to hear what this surface sounds like." into field "text box" if gSpotType = "link" and currLoc = "skyw" then put "Click to" && spotName into field "text box" end if if gSpotType = "kios" then put "Click on this kiosk to find out more about" && spotName & "." into field "text box" if pHotSpotID = 0 then put " " into field "text box" end on gotoAction if onPC then set spotname = gPanoMovie (mGetHotSpotName) else set spotName = PanoMovie("Direct", gPanoMovie, "get", "hotSpotName") end if -- closePanoMovie cursor 200 cursor 0 unPuppetAll -- deBug "spotName", spotName go spotName end on playSound set soundList = ["foleMetal","foleAsphault","foleMarble", "foleSnow","foleDirt","foleCreakyporch","foleWoodfloor","foleMetal","foleGravel","foleCobblestone","foleSand","foleSand","foleGrate","foleLinoleum","foleSand","foleTile","foleCobblestone","foleCobblestone","foleDock","foleSand"] set temp = getAt(soundList,integer(currSpot - 100)) -- debug "current Sound:", temp puppetSound temp updateStage -- debug "currSpot for foley", currSpot end on exitStudio if onPC then set spotname = gPanoMovie (mGetHotSpotName) else set spotName = PanoMovie("Direct", gPanoMovie, "get", "hotSpotName") end if -- deBug "spotName", spotName set exitFrameName = currLoc & "Exit" -- deBug "exitFrameName" , exitFrameName go exitFrameName end on panToExit set anglesList = getAProp(exitPanList, currLoc) put anglesList set hPan = getAt(anglesList, 1) set vPan = getAt(anglesList, 2) set zoom = getAt(anglesList, 3) SwingPanoMovie hPan, vPan, zoom, 3, 1, 1 end on returnToTerminus set the locV of sprite 28 = -1000 set the locV of sprite 29 = -1000 unPuppetAll puppetTransition 9, 2, 24 go label("Terminus") +1 set currPano = "TermPano.mov" openPanoMovie currPano, 4, false set nodeNumber = getAProp(termPanList,currLoc) SetPanoNode nodeNumber, 1 set currLoc = "terminus" updateNodeMarker end on returnToAtrium unPuppetAll go "Atrium 2" set currPano = "AtrPano.mov" openPanoMovie currPano, 4, false -- deBug "currloc", currLoc set currList = getAProp(gAtriumPanList, currLoc) -- deBug "currlist", currList set nodeNumber = getAt(currList,1) set hPan = getAt(currList, 2) set currLoc = "Atrium" SetPanoNode nodeNumber, 0 SetPanoMovieView hPan, 0, 56 updateNodeMarker end on goStudio unPuppetAll if onPC then set spotname = gPanoMovie (mGetHotSpotName) else set spotName = PanoMovie("Direct", gPanoMovie, "get", "hotSpotName") end if set currLoc = spotName go "zoom" end on goKiosk stashPanoData unPuppetAll if onPC then set spotname = gPanoMovie (mGetHotSpotName) else set spotName = PanoMovie("Direct", gPanoMovie, "get", "hotSpotName") end if closePanoMovie set currLoc = word 1 of spotName unload preLoad currLoc, currLoc go currLoc cursor 200 cursor 0 end on stashPanoData if onPC then set gStashedPanoData = [gPanoMovie (mGetHPanAngle), gPanoMovie (mGetVPanAngle), gPanoMovie (mGetZoomAngle)] else set gStashedPanoData = [PanoMovie("Direct", gPanoMovie, "get", "hpanAngle"), PanoMovie("Direct", gPanoMovie, "get", "vpanAngle"),PanoMovie("Direct", gPanoMovie, "get", "zoomAngle")] end if end on restorePano -- deBug "restore: currNode", currNode set oldCurrNode = integer(currNode) openPanoMovie currPano, 4, false setPanoNode oldCurrNode, false -- deBug "restore 2: currNode", currNode set hPan = getAt(gStashedPanoData, 1) set vPan = getAt(gStashedPanoData, 2) set zoom = getAt(gStashedPanoData, 3) setPanoMovieView hPan, vPan, 56 if currLoc = "skyw" then checkNodeMap updateNodeMarker end on popRack set gIsRack = true set textSprite = 1 set textCast = the number of cast (currLoc && "rack" && currSpot) setText #equipt set the castNum of sprite textSprite = textCast updateStage repeat while the mouseDown updatestage end repeat end on unPopRack setText #equipt set gIsRack = false end --============================================================================= -- XCMD Callback Factory ------------------------------------------------------------------------------- --============================================================================= -- CallBackTracer -- -- As described in "Using Lingo", Appendix A. Pass any mSendCardMessage -- commands on to Lingo so that callbacks can be handled. ------------------------------------------------------------------------------- factory CallBackTracer method mNew method mEvalExpr pExpr method mSendHCMessage pMessage method mSendCardMessage pMessage do pMessage method mGetFieldByName pCard, pName method mGetFieldByNum pCard, pNum method mGetFieldByID pCard, pID method mSetFieldByName pCard, pName, pValue method mSetFieldByNum pCard, pNum, pValue method mSetFieldByID pCard, pID, pValue end